package com.alibaba.nacos.config.server.jpa.repository;

import java.util.List;

import com.alibaba.nacos.config.server.jpa.entity.ConfigInfoAggrEntity;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.stereotype.Repository;

/**
 * @author
 * @date 2020-03-08 23:31
 */
@Repository
public interface ConfigInfoAggrRepository extends BaseRepository<ConfigInfoAggrEntity, Long> {

    ConfigInfoAggrEntity queryByDataIdAndGroupIdAndTenantIdAndDatumId(String dataId, String groupId,
                                                                      String tenantId, String datumId);

    int countByDataIdAndGroupIdAndTenantId(String dataId, String groupId, String tenantId);

    int countByDataIdAndGroupIdAndTenantIdAndDatumIdIn(String dataId, String groupId,
                                                       String tenantId, List<String> datumIds);

    int countByDataIdAndGroupIdAndTenantIdAndDatumIdNotIn(String dataId, String groupId,
                                                          String tenantId, List<String> datumIds);

    @Modifying
    void deleteByDataIdAndGroupIdAndTenantIdAndDatumIdIn(String dataId, String groupId,
                                                         String tenantId, List<String> datumIds);

    ConfigInfoAggrEntity findByDataIdAndGroupIdAndTenantIdAndDatumId(
        String dataId, String groupId, String tenantId, String datumId);

    List<ConfigInfoAggrEntity> findByDataIdAndGroupIdAndTenantIdOrderByDatumId(
        String dataId, String groupId, String tenantId);

    List<ConfigInfoAggrEntity> findByDataIdAndGroupIdAndTenantId(
        String dataId, String groupId, String tenantId);

    Page<ConfigInfoAggrEntity> findByDataIdAndGroupIdAndTenantId(
        String dataId, String groupId, String tenantId, Pageable pageable);

    @Modifying
    void deleteByDataIdAndGroupIdAndTenantId(String dataId, String groupId, String tenantId);

    @Modifying
    void deleteByDataIdAndGroupIdAndTenantIdAndDatumId(String dataId, String groupId, String tenantId, String datumId);
}
